#pragma once

#include "Iterador.h"
#include "Puntero.h"

template <class T, class U>
class ConvertIterador abstract : public Iterador<U>
{
public:
	ConvertIterador(Puntero<Iterador<T>> toConvert);
	virtual ~ConvertIterador();

	void Reiniciar();
	bool HayElemento() const;
	const U& ElementoActual() const;
	void Avanzar();

protected:
	virtual const U& Convertir(const T& t) const abstract;

private:
	Puntero<Iterador<T>> m_ToConvert;
	mutable U m_Actual;
};

#include "ConvertIterador.cpp"
